//==========================================================
// Exception.cpp
//
// Implantation des classes d'exceptions
//
//==========================================================


//==========================================================
// En-têtes
//==========================================================
#include "Exceptions.hpp"
#include <sstream>


namespace Tools
{

	////////////////////////////////////////////////////////////
	// Constructeur
	//
	// [in] Message : Message d'erreur
	//
	////////////////////////////////////////////////////////////
	Exception::Exception(const std::string& Message) :
	m_Message(Message)
	{
	
	}
	
	
	////////////////////////////////////////////////////////////
	// Destructeur
	//
	////////////////////////////////////////////////////////////
	Exception::~Exception()
	{
	
	}
	
	
	////////////////////////////////////////////////////////////
	// Renvoie le message associé à l'exception
	//
	// [retval] Pointeur sur le message
	//
	////////////////////////////////////////////////////////////
	const char* Exception::what() const
	{
	    return m_Message.c_str();
	}
	
	
	////////////////////////////////////////////////////////////
	// Constructeur
	//
	// [in] File :    Fichier source contenant l'erreur
	// [in] Line :    Ligne à laquelle se trouve l'erreur dans le fichier source
	// [in] Message : Message d'erreur
	//
	////////////////////////////////////////////////////////////
	AssertException::AssertException(const std::string& File, int Line, const std::string& Message)
	{
	    // Formatage du message d'erreur
	    std::ostringstream oss;
	    oss << Message << "[" << File << "] (" << Line << ")\n";
	
	    m_Message = oss.str();
	}
	
	
	////////////////////////////////////////////////////////////
	// Constructeur
	//
	// [in] File :    Fichier
	// [in] Message : Message d'erreur
	//
	////////////////////////////////////////////////////////////
	LoadingFailed::LoadingFailed(const std::string& File, const std::string& Message)
	{
	    // Formatage du message d'erreur
	    std::ostringstream oss;
	    oss << "Erreur dans le chargement de [" << File << "] -> " << Message << std::endl;
	
	    m_Message = oss.str();
	}
	
	////////////////////////////////////////////////////////////
	// Constructeur
	//
	// [in] Message : Message d'erreur
	//
	////////////////////////////////////////////////////////////
	InvalidDevice::InvalidDevice(const std::string& Message)
	{
	    // Formatage du message d'erreur
	    std::ostringstream oss;
	    oss << "Device invalide -> " << Message << std::endl;
	
	    m_Message = oss.str();
	}

	////////////////////////////////////////////////////////////
	// Constructeur
	//
	// [in] width : largeur de l'image
	// [in] height : hauteur de l'image
	// [in] Message : Message d'erreur
	//
	////////////////////////////////////////////////////////////
	InvalidImageSize::InvalidImageSize(int width, int height, const std::string& Message)
	{
	    // Formatage du message d'erreur
	    std::ostringstream oss;
	    oss << "Taille de l'image invalide [w:" << width << ",h:" << height << "]-> " << Message << std::endl;
	
	    m_Message = oss.str();
	}
	
	////////////////////////////////////////////////////////////
	// Constructeur
	//
	// [in] width : largeur de l'image
	// [in] height : hauteur de l'image
	// [in] Message : Message d'erreur
	//
	////////////////////////////////////////////////////////////
	CalibrationFailed::CalibrationFailed(const std::string& Message)
	{
	    // Formatage du message d'erreur
	    std::ostringstream oss;
	    oss << "Echec du calibrage [Cause:" << Message << "]" << std::endl;
	
	    m_Message = oss.str();
	}
	
	////////////////////////////////////////////////////////////
	// Constructeur
	//
	// [in] width : largeur de l'image
	// [in] height : hauteur de l'image
	// [in] Message : Message d'erreur
	//
	////////////////////////////////////////////////////////////
	SystemBusy::SystemBusy()
	{
	    m_Message = "Impossible d'effectuer l'opération demandée [Cause: Système occupee]\n";
	}
	
	
} // namespace Tools
